# $Id: db.py 7557b5d4d82b 2012/12/02 09:07:16 pgurumur $
# Copyright (c) 2009 Prabhu Gurumurthy  <pgurumur@gmail.com>
# 
# Permission to use, copy, modify, and distribute this software for any
# purpose with or without fee is hereby granted, provided that the above
# copyright notice and this permission notice appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
#

__version__ = "$Revision: 7557b5d4d82b $"
__author__ = "$Author: pgurumur $"

from django.conf import settings
from django.core import signals
from django.db.utils import ConnectionHandler, load_backend

__all__ = [
      'AppRouter',
      'DataBase',
      'DataBaseError',
      ]

class DataBaseError(Exception):
   pass

class DataBase(object):
   def __init__(self, **Keywords):
      super(DataBase, self).__init__()
      self._err = DataBaseError()
      self._dbConn = None
      self._dbConnect = None
      self._dbBackend = None
      self._settings = {}
      self._dbSettings = {}

      if "engine" in Keywords:
         self._settings['ENGINE'] = Keywords['engine']

      if "host" in Keywords:
         self._settings['HOST'] = Keywords['host']

      if "name" in Keywords:
         self._settings['NAME'] = Keywords['name']

      if "user" in Keywords:
         self._settings['USER'] = Keywords['user']

      if "passwd" in Keywords:
         self._settings['PASSWORD'] = Keywords['passwd']

      if "port" in Keywords:
         try:
            self._settings['PORT'] = int(Keywords['port'])
         except ValueError, message:
            raise DataBaseError, message

      if "options" in Keywords:
         self._settings['OPTIONS'] = Keywords['options']

      if "testdb" in Keywords:
         self._settings['TEST_NAME'] = Keywords['testdb']

      self._dbSettings['DEFAULT_DB_ALIAS'] = self._settings
      self._dbConnect = ConnectionHandler(self._dbSettings)
      self._dbConn = self._dbConnect['DEFAULT_DB_ALIAS']
      self._dbBackend = load_backend(connection.settings_dict['ENGINE'])

   def Close(self, **kwargs):
      for conn in self._dbConnect.all():
         conn.close()

   def Reset(self, **kwargs):
      for conn in self._dbConnect.all():
         conn.queries = []

class AppRouter(object):
   def db_for_read(self, model, **hints):
      retval = 'default'
      if model._meta.app_label == 'djauth':
         retval = 'djanet'

      return retval

   def db_for_write(self, model, **hints):
      return self.db_for_read(model, **hints)

   def allow_syncdb(self, db, model):
      retval = None
      if model._meta.app_label == 'djauth':
         retval = False

      return retval
